/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package com.unwiredgrain.modeling.sscm;


/**
 * <!-- begin-user-doc -->
 * A representation of the model object '<em><b>Facet</b></em>'.
 * <!-- end-user-doc -->
 *
 * <p>
 * The following features are supported:
 * <ul>
 *   <li>{@link com.unwiredgrain.modeling.sscm.Port#getProtocol <em>Protocol</em>}</li>
 *   <li>{@link com.unwiredgrain.modeling.sscm.Port#getUid <em>Uid</em>}</li>
 *   <li>{@link com.unwiredgrain.modeling.sscm.Port#getDirection <em>Direction</em>}</li>
 *   <li>{@link com.unwiredgrain.modeling.sscm.Port#isMultiple <em>Multiple</em>}</li>
 *   <li>{@link com.unwiredgrain.modeling.sscm.Port#getProtocolTemplateInstantiation <em>Protocol Template Instantiation</em>}</li>
 *   <li>{@link com.unwiredgrain.modeling.sscm.Port#isOptional <em>Optional</em>}</li>
 *   <li>{@link com.unwiredgrain.modeling.sscm.Port#getProtocolName <em>Protocol Name</em>}</li>
 * </ul>
 * </p>
 *
 * @see com.unwiredgrain.modeling.sscm.SSCMPackage#getPort()
 * @model
 * @generated
 */
public interface Port extends NamedElement {
	/**
	 * Returns the value of the '<em><b>Protocol</b></em>' reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Protocol</em>' reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Protocol</em>' reference.
	 * @see #setProtocol(Protocol)
	 * @see com.unwiredgrain.modeling.sscm.SSCMPackage#getPort_Protocol()
	 * @model required="true" transient="true" volatile="true" derived="true"
	 * @generated
	 */
	Protocol getProtocol();

	/**
	 * Sets the value of the '{@link com.unwiredgrain.modeling.sscm.Port#getProtocol <em>Protocol</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Protocol</em>' reference.
	 * @see #getProtocol()
	 * @generated
	 */
	void setProtocol(Protocol value);

	/**
	 * Returns the value of the '<em><b>Direction</b></em>' attribute.
	 * The literals are from the enumeration {@link com.unwiredgrain.modeling.sscm.PortDirection}.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Direction</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Direction</em>' attribute.
	 * @see com.unwiredgrain.modeling.sscm.PortDirection
	 * @see #setDirection(PortDirection)
	 * @see com.unwiredgrain.modeling.sscm.SSCMPackage#getPort_Direction()
	 * @model required="true"
	 * @generated
	 */
	PortDirection getDirection();

	/**
	 * Sets the value of the '{@link com.unwiredgrain.modeling.sscm.Port#getDirection <em>Direction</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Direction</em>' attribute.
	 * @see com.unwiredgrain.modeling.sscm.PortDirection
	 * @see #getDirection()
	 * @generated
	 */
	void setDirection(PortDirection value);

	/**
	 * Returns the value of the '<em><b>Multiple</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Multiple</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Multiple</em>' attribute.
	 * @see #setMultiple(boolean)
	 * @see com.unwiredgrain.modeling.sscm.SSCMPackage#getPort_Multiple()
	 * @model required="true"
	 * @generated
	 */
	boolean isMultiple();

	/**
	 * Sets the value of the '{@link com.unwiredgrain.modeling.sscm.Port#isMultiple <em>Multiple</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Multiple</em>' attribute.
	 * @see #isMultiple()
	 * @generated
	 */
	void setMultiple(boolean value);

	/**
	 * Returns the value of the '<em><b>Protocol Template Instantiation</b></em>' containment reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Operation Interface Template Instantiation</em>' containment reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Protocol Template Instantiation</em>' containment reference.
	 * @see #setProtocolTemplateInstantiation(ProtocolTemplateInstantiation)
	 * @see com.unwiredgrain.modeling.sscm.SSCMPackage#getPort_ProtocolTemplateInstantiation()
	 * @model containment="true" required="true"
	 * @generated
	 */
	ProtocolTemplateInstantiation getProtocolTemplateInstantiation();

	/**
	 * Sets the value of the '{@link com.unwiredgrain.modeling.sscm.Port#getProtocolTemplateInstantiation <em>Protocol Template Instantiation</em>}' containment reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Protocol Template Instantiation</em>' containment reference.
	 * @see #getProtocolTemplateInstantiation()
	 * @generated
	 */
	void setProtocolTemplateInstantiation(ProtocolTemplateInstantiation value);

	/**
	 * Returns the value of the '<em><b>Optional</b></em>' attribute.
	 * The default value is <code>"false"</code>.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Optional</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Optional</em>' attribute.
	 * @see #setOptional(boolean)
	 * @see com.unwiredgrain.modeling.sscm.SSCMPackage#getPort_Optional()
	 * @model default="false" required="true"
	 * @generated
	 */
	boolean isOptional();

	/**
	 * Sets the value of the '{@link com.unwiredgrain.modeling.sscm.Port#isOptional <em>Optional</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Optional</em>' attribute.
	 * @see #isOptional()
	 * @generated
	 */
	void setOptional(boolean value);

	/**
	 * Returns the value of the '<em><b>Protocol Name</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Protocol Name</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Protocol Name</em>' attribute.
	 * @see com.unwiredgrain.modeling.sscm.SSCMPackage#getPort_ProtocolName()
	 * @model required="true" transient="true" changeable="false" volatile="true" derived="true"
	 * @generated
	 */
	String getProtocolName();

	/**
	 * Returns the value of the '<em><b>Uid</b></em>' attribute.
	 * The default value is <code>"default-guid"</code>.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Uid</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Uid</em>' attribute.
	 * @see #setUid(String)
	 * @see com.unwiredgrain.modeling.sscm.SSCMPackage#getPort_Uid()
	 * @model default="default-guid" id="true" required="true"
	 * @generated
	 */
	String getUid();

	/**
	 * Sets the value of the '{@link com.unwiredgrain.modeling.sscm.Port#getUid <em>Uid</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Uid</em>' attribute.
	 * @see #getUid()
	 * @generated
	 */
	void setUid(String value);

} // Facet
